package com.wx.gof.pattern.structural.adapter.objectadapter;

/**
 * @ClassName Application
 * @Author wx
 * @Description
 * 定义:
 * 适配器模式把一个类的接口变换成客户端所期待的另一种接口。
 * 描述:
 * 使原本不兼容的类可以一起工作
 * 用电器做例子，笔记本电脑的插头一般都是三相的，即除了阳极、阴极外，还有一个地极。而有些地方的电源插座却只有两极，没有地极。
 * 电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器（适配器）就能解决此问题，
 * 而这正像是本模式所做的事情。
 * 适用场景:
 * 1.已经存在的类，它的方法和需求不匹配时(方法结果相同或相似)
 * 2.此设计模式不是软件设计阶段考虑的，是随着软件维护，由于不同厂家造成功能类型而接口不相同情况下的解决方案，有点亡羊补牢的意思
 * 优点:
 * 1.能提高类的透明性与复用，现有的类复用但不需要改变
 * 2.扩展多个适配器类,提高程序扩展性（可以调用自己开发的功能，从而自然地扩展系统的功能）
 * 缺点:
 * 1.增加系统代码可读性
 * 过多的使用适配器，会让系统非常零乱，不易整体进行把握。比如，明明看到调用的是A接口(适配器)，
 * 其实内部被适配成了B接口的实现，一个系统如果太多出现这种情况，无异于一场灾难。因此如果不是很有必要，
 * 可以不使用适配器，而是直接对系统进行重构。
 * 理解:
 * 应用程序-适配器模式-组合类型(适用于开闭原则，一个适配器对应一个被适配对象)
 * @Date 2018-12-08-21:39
 */
public class Application {
    public static void main(String[] agrs){
        /**
         * 第一个适配器
         */
        Target target = new Adapter();
        target.request();
        /**
         * 第二个适配器
         */
        Target target1 = new AdapterV2();
        target1.request();
    }
}
